#pragma once

#include <QMainWindow>
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QListWidget>
#include <QPushButton>
#include <QProgressBar>
#include <QStatusBar>
#include <QMenuBar>
#include <QFileDialog>
#include <QMessageBox>
#include <QApplication>
#include <QSplitter>
#include <QGroupBox>
#include <QTimer>
#include <QSettings>

#include "packconfig.h"
#include "packworker.h"

// 前向声明
struct zip;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void openConfig();
    void saveConfig();
    void saveAsConfig();
    void newConfig();
    void addFiles();
    void addFolders();
    void removeSelectedItems();
    void startPacking();
    void onConfigChanged();
    void selectOutputDir();
    void selectSourceDir();
    void validatePaths();
    
    // PackWorker 相关槽函数
    void onProgressChanged(int progress);
    void onStatusChanged(const QString& status);
    void onErrorOccurred(const QString& error);
    void onPackingFinished(bool success, const QString& outputPath);

private:
    void setupUI();
    void setupConfigArea();
    void setupFilesArea();
    void setupBottomArea();
    QHBoxLayout* setupBottomLayout();
    void setupMenuBar();
    void connectSignals();
    void updateUI();
    void clearUI();
    void updateConfigFromUI();
    void updateWindowTitle();
    void showProgress(const QString& message);
    void hideProgress();
    
    // 设置管理
    void loadSettings();
    void saveSettings();

    // UI组件
    QWidget* m_centralWidget;
    QSplitter* m_mainSplitter;
    
    // 配置编辑区域
    QGroupBox* m_configGroup;
    QLineEdit* m_nameEdit;
    QLineEdit* m_versionEdit;
    QLineEdit* m_descriptionEdit;
    QLineEdit* m_outputEdit;
    QLineEdit* m_outputDirEdit;
    QLineEdit* m_sourceDirEdit;
    
    // 文件和文件夹列表区域
    QGroupBox* m_filesGroup;
    QListWidget* m_filesList;
    QListWidget* m_foldersList;
    
    // 按钮区域
    QPushButton* m_addFilesBtn;
    QPushButton* m_addFoldersBtn;
    QPushButton* m_removeBtn;
    QPushButton* m_packBtn;
    
    // 进度条
    QProgressBar* m_progressBar;
    QLabel* m_statusLabel;
    
    // 数据
    PackConfig m_config;
    QString m_currentConfigPath;
    bool m_configModified;
    QString m_lastOpenDir; // 保存上次打开的目录
    
    // 打包工作器
    PackWorker* m_packWorker;
    QThread* m_workerThread;
};
